#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>

#include "WS_Flow_S.h"

// 点阵屏配置（根据实际硬件修改）
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(
  8, 8, RGB_Control_PIN,
  NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE
);

// 全局变量
int16_t matrixWidth = matrix.width();
int16_t scrollPos = matrixWidth;  // 起始位置：屏幕最右侧
uint16_t colors[] = { matrix.Color(255, 0, 0) }; // 红色

// 计算字符宽度（更高效的实现）
int16_t _getCharWidth(char c) {
  int16_t x, y;
  uint16_t w, h;
  // 获取字符边界框（不实际绘制）
  matrix.getTextBounds(String(c), 0, 0, &x, &y, &w, &h);
  return w;
}

void charFlow(char displayChar) {
  matrix.setTextWrap(false);  // 禁用自动换行
  matrix.setBrightness(20);   // 设置亮度(0-255)

  int16_t charWidth = _getCharWidth(displayChar);  // 预计算字符宽度
  
  matrix.fillScreen(0);  // 清屏
  matrix.setTextColor(colors[0]);
  matrix.setCursor(scrollPos, 0);  // Y位置固定为0（单行显示）
  matrix.print(displayChar);
  
  scrollPos--;  // 向左滚动1像素
  
  // 重置位置：当字符完全滚出屏幕左侧时
  if (scrollPos < -charWidth) {
    scrollPos = matrixWidth;
  }
  
  matrix.show();  // 更新显示
}
